#include <stdio.h>

void main()

{
    // 数组是一连串连续储存的同类型值，只要获得起始地址（首个成员的内存地址），就能推算出其他成员的地址
    int a[5] = {11, 22, 33, 44, 55};
    int *p;
    int *q;

    p = &a[0];
    // 等同于
    q = a; // 数组名其实就是数组第一个元素的地址的指针

    printf("%d\n", *p); // Prints "11"
    printf("%d\n", *q); // Prints "11"

    // 函数接受数组作为参数，函数原型可以写成下面这样
    // 写法一
    // int sum(int arr[], int len);
    // 写法二
    // int sum(int* arr, int len);

    // 数组名指向的地址是不能更改的。声明数组时，编译器自动为数组分配了内存地址，这个地址与数组名是绑定的，不可更改
    // 数组定义当于  int* const arr1 = []; 无法赋值与修改，arr1相当于常量指针无法修改，只能通过下标修改
    int arr[5] = {1, 2, 3, 4, 5};
    // int b[5] = arr; // 报错
}